package com.hsnn.medstgmini.base.std.service.impl;

import java.util.List;
import java.util.Map;

import javax.transaction.Transactional;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.hsnn.medstgmini.base.std.dao.StdExpertDao;
import com.hsnn.medstgmini.base.std.model.StdExpert;
import com.hsnn.medstgmini.base.std.model.StdExpertLog;
import com.hsnn.medstgmini.base.std.service.StdExpertManager;
import com.hsnn.medstgmini.sys.model.SysUser;
import com.hsnn.medstgmini.util.Pagination;

/**
 * 
 * @author kee
 * @category 专家库
 * @date  2015年6月9日
 */

@Service
public class StdExpertManagerImpl  implements StdExpertManager {
	
	@Autowired
	private StdExpertDao stdExpertDao;

	/**
	 * 
	 *@category 查询专家库列表
	 *@author yanke
	 *@date 2015年6月9日
	 */
	@Override
	public Pagination getStdExpertList(Pagination page) {
		return stdExpertDao.getStdExpertList(page);
	}
	

	/**
	 * 
	 *@category 根据id查询专家库信息
	 *@author yanke
	 *@date 2015年6月9日
	 */
	public StdExpert getStdExpertById(String id) {
		return stdExpertDao.getStdExpertById(id);
	}

	/**
	 * 
	 *@category 保存专家库信息
	 *@author yanke
	 *@date 2015年6月9日
	 *void
	 */
	@Transactional
	public void saveStdExpert(StdExpert stdExpert) {
		if(stdExpert != null){
			stdExpertDao.saveStdExpert(stdExpert);
		}
	}

	/**
	 * 
	 *@category 查询专家库维护记录列表
	 *@author yanke
	 *@date 2015年6月9日
	 *List<StdExpertLog>
	 */
	public List<Object> getStdExpertLogList(Pagination page,StdExpertLog stdExpertLog) {
		List<Object> list = stdExpertDao.getStdExpertLogList(page, stdExpertLog);
		
		for(int i = 0;i<list.size();i++){
			Object[] obj = (Object[])list.get(i);
			String detail = obj[1]==null?"":obj[1].toString();
			if(StringUtils.isNotBlank(detail)){
				if(detail.toString().indexOf(",")<0){
					detail = "新增专家:<br/>".concat(detail.replaceAll(";", "<br/>"));
					
				}else{
					detail= detail.replaceAll(":", "由");
					detail= detail.replaceAll(",", "变为");
					detail= detail.replaceAll(";", "<br/>");
				}
			}
			obj[1] = detail;
		}
		
		return list;
	}

	/**
	 * 
	 *@category 停用启用（状态改变）
	 *@author yanke
	 *@date 2015年6月9日
	 *void
	 */
	@Override
	public void changeStatus(StdExpert stdExpert) {
		stdExpertDao.changeStatus(stdExpert);
	}
	


	/**
	 * 
	 *@category 批量停用启用（状态改变）
	 *@author yanke
	 *@date 2015年6月9日
	 *void
	 */
	@Transactional
	public int batchChangeStatus(StdExpert stdExpert) {
		return stdExpertDao.batchChangeStatus(stdExpert);
	}

	/**
	 * 
	 *@category 查询维护记录修改前和修改后的记录
	 *@author yanke
	 *@date 2015年6月9日
	 *List<StdExpert>
	 */
	public List<StdExpertLog> getStdExpertCompareList(StdExpertLog stdExpertLog) {
		return stdExpertDao.getStdExpertCompareList(stdExpertLog);
	}

	@Override
	public List<StdExpert> getStdExpertListByExpertCode(String expertCode) {
		return stdExpertDao.getStdExpertListByExpertCode(expertCode);
	}

	/**
	 * 
	 *@category 查询维护记录详情
	 *@author yanke
	 *@date 2015年6月9日
	 *List<StdExpert>
	 */
	@Override
	public List<Map<String, Object>> getStdExpertLogDetail(Pagination page) {
		return stdExpertDao.getStdExpertLogDetail(page);
	}

	/**
	 * 
	 *@category 专家库详情
	 *@author yanke
	 *@date 2015年9月21日
	 */
	@Override
	public List<Map<String, Object>> getStdExpertDetail(Pagination page) {
		return stdExpertDao.getStdExpertDetail(page);
	}

	/**
	 * 新增编辑
	 * @param page
	 */
	@Transactional
	public void addAndEdit(StdExpert stdExpert , SysUser user) {
		this.stdExpertDao.addAndEdit(stdExpert, user);
	}

	/**
	 * 根据code或name查看有无重复数据
	 * @param code,name
	 * @return
	 */
	@Transactional
	@Override
	public List<StdExpert> getPackunitBy(String key, String value, String id) {
		return stdExpertDao.getPackunitBy(key, value, id);
	}

	/**
	 * 根据条件获取不分页数据
	 * @param page
	 * @return page
	 */
	@Override
	public Pagination getStdExpertNoPage(Pagination page){
		return stdExpertDao.getStdExpertNoPage(page);
	}

	
}
